#! /usr/bin/env python
# -*- coding:utf-8 -*-
# @Time : 2020-04-04 20:17
# @Author : youngchaolin

# 作业1 看代码写结果
def func(*args,**kwargs):
    print(args)
    print(kwargs)

# 请执行函数，并实现让args的值为(1,2,3,4)
func(1,2,3,4)
# 请执行函数，并实现让args的值为([1,2,3,4],[11,22,33])
func([1,2,3,4],[11,22,33])
# 请执行函数，并实现args的值为([11,22],33)，并且kwargs的值为{'k1':'v1','k2':'v2'}
func([11,22],33,k1='v1',k2='v2')
# 如果执行func(*{'messi','ronald','herry'})，请问args和kwargs的值分别是多少？
func(*{'messi','ronald','herry'})
# 如果执行func({'messi','ronald','herry'},[11,22,33])，请问args和kwargs的值分别是多少？
s1={'messi','ronald','herry'}
# s1是set集合
print(s1,type(s1))
func({'messi','ronald','herry'},[11,22,33])
# 如果执行func({'messi','ronald','herry'},[11,22,33],**{'k1':'v1'})，请问args和kwargs的值分别是多少？
func('messi','ronald','herry',[11,22,33],**{'k1':'v1'})

# 作业2 略，注意位置参数一定要在关键字参数的前面，并且参数不能多重赋值，否则报错
def func(name,age=18,email='clyang@163.com'):
    print(name)
    print(age)
    print(email)

# 位置参数一定要在关键字参数的前面,下面的语句编译都不会通过
# func(age=20,'messi')

# 报错func() got multiple values for argument 'name' 参数多重赋值了
# func('messi','messi@163.com',name='clyang')

# 作业3
def func(users,name):
    users.append(name)
    return users

result=func(['messi','ronald'],'herry')
print(result)

# 作业4 高阶函数
def func(v1):
    return v1*2

def bar(args):
    return '%s是什么鸟玩意'%(args,)

val=func('你')
data=bar(val)
print(data)

# 作业4 高阶函数
v1='alex'
def func():
    v1='女神'
    def inner():
        print(v1)
    v1='男神'
    inner()
    # v1='男神'

func()
print(v1)
v1='老男人'
func()
print(v1)

# 看代码写结果
a=10
b=20
def test(a,b):
    print(a,b)
c=test(b,a) # 20 10
print(c) # None

